package main

import "fmt"

type Person struct {
	Age int
}

func (p *Person) GrowUp() {
	p.Age++
}

func main() {
	m := make(map[string]Person)
	m["zhangsan"] = Person{Age: 20}

	//m["zhangsan"].Age = 23 // Cannot assign to m["zhangsan"].Age
	// 第一种更新方式
	p := m["zhangsan"]
	p.Age = 23
	p2 := m["zhangsan"]
	fmt.Println(p2.Age) // 20

	// 第二种更新方式
	m["zhangsan"] = p // 更新
	p3 := m["zhangsan"]
	fmt.Println(p3.Age) // 23

}

// map 的值是不可寻址的，当你使用 m["zhangsan"] 取得值时，其实返回的是其值的拷贝，
//虽然与原数据值相同，但是在内存中并不是同一个数据。
//也正是这样，当 map 的值是一个普通对象，包括切片（非指针），是无法直接对其修改的

// 如果值是指针类型，则可以直接赋值，参考https://stackoverflow.com/questions/69475165/golang-does-not-update-array-in-a-map
